package java_thinking.unit_15._15_3;

import java.util.Iterator;

/**
 * @Description : 适配器模式-类适配器模式
 *                这里为了编写一个实现了Iterator的Fibonacci，但是我们可能没有Fibonacci的权限，或者是已经被人引用了
 *                不方便去改内部源码，这时候就需要使用适配器模式，创建一个新类同时继承Fibonacci与实现Iterable
 * @author: cww
 * @DateTime: 2019/4/2 19:30
 */

public class IterableFibonacci extends Fibonacci implements Iterable<Integer> {

    private int n ;
    private IterableFibonacci(int count) {
        n = count;
    }
    /**
     * Returns an iterator over elements of type {@code T}.
     *
     * @return an Iterator.
     */
    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            @Override
            public boolean hasNext() {
                return n > 0;
            }

            @Override
            public Integer next() {
                n--;
                return IterableFibonacci.this.next();
            }
        };
    }

    public static void main(String[] args) {
        IterableFibonacci integers = new IterableFibonacci(20);
        for (int i:integers){
            System.out.print(i+ " ");
        }
    }
}
